#pragma once

#define IMG_OBJ_W   16
#define IMG_OBJ_H   16

#define BYTES_PER_ISSUE 23
#define COUNT_ISSUES    40

enum IMG_OBJ_ID {
    IMG_OBJ_DIE_1A = 0,
    IMG_OBJ_DIE_1B,
    IMG_OBJ_DIE_1C,
    IMG_OBJ_DIE_1D,
    IMG_OBJ_DIE_2A,
    IMG_OBJ_DIE_2B,
    IMG_OBJ_DIE_2C,
    IMG_OBJ_DIE_2D,
    IMG_OBJ_DIE_3A,
    IMG_OBJ_DIE_3B,
    IMG_OBJ_DIE_3C,
    IMG_OBJ_DIE_3D,
    IMG_OBJ_DIE_4A,
    IMG_OBJ_DIE_4B,
    IMG_OBJ_DIE_4C,
    IMG_OBJ_DIE_4D,
    IMG_OBJ_DIE_5A,
    IMG_OBJ_DIE_5B,
    IMG_OBJ_DIE_5C,
    IMG_OBJ_DIE_5D,
    IMG_OBJ_DIE_6A,
    IMG_OBJ_DIE_6B,
    IMG_OBJ_DIE_6C,
    IMG_OBJ_DIE_6D,
    IMG_OBJ_DIE_W_1,
    IMG_OBJ_DIE_W_2A,
    IMG_OBJ_DIE_W_2B,
    IMG_OBJ_DIE_W_3A,
    IMG_OBJ_DIE_W_3B,
    IMG_OBJ_DIE_W_4,
    IMG_OBJ_DIE_W_5,
    IMG_OBJ_DIE_W_6A,
    IMG_OBJ_DIE_W_6B,
    IMG_OBJ_DIE_DUMMY,
    IMG_OBJ_DIE_MASK,
    IMG_OBJ_ID_MAX,
};

/*---------------------------------------------------------------------------*/
/*                                Image Data                                 */
/*---------------------------------------------------------------------------*/

PROGMEM static const uint8_t imgObj[IMG_OBJ_ID_MAX][32] = { // 16x16 xIMG_OBJ_ID_MAX(=34)
    { 0xFF, 0x01, 0x01, 0x01, 0x01, 0x61, 0x61, 0x01, 0x01, 0x01, 0x01, 0xFF, 0x1A, 0x84, 0x08, 0xF0, 0x0F, 0x18, 0x28, 0x58, 0x98, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0xCF, 0xD0, 0xA1, 0xD8, 0xFF },
    { 0xFF, 0x01, 0x01, 0x01, 0x01, 0x61, 0x61, 0x01, 0x01, 0x01, 0x01, 0xFF, 0x1A, 0x84, 0x68, 0xF0, 0x0F, 0x18, 0x28, 0x48, 0x88, 0xC8, 0xC8, 0xA8, 0xA8, 0x98, 0x98, 0x8F, 0x96, 0xA1, 0xD8, 0xFF },
    { 0xFF, 0x01, 0x01, 0x01, 0x01, 0x61, 0x61, 0x01, 0x01, 0x01, 0x01, 0xFF, 0x1A, 0x04, 0x68, 0xF0, 0x0F, 0x18, 0x28, 0x58, 0x98, 0xC8, 0xC8, 0xA8, 0xA8, 0x98, 0x98, 0xCF, 0xD6, 0xA0, 0xD8, 0xFF },
    { 0xFF, 0x01, 0x01, 0x01, 0x01, 0x61, 0x61, 0x01, 0x01, 0x01, 0x01, 0xFF, 0x02, 0x04, 0x68, 0xF0, 0x0F, 0x18, 0x28, 0x58, 0x98, 0xC8, 0xC8, 0x88, 0x88, 0x98, 0x98, 0xCF, 0xD6, 0xA0, 0xC0, 0xFF },
    { 0xFF, 0x01, 0x0D, 0x0D, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0xFF, 0x1A, 0x04, 0x68, 0xF0, 0x0F, 0x18, 0x28, 0x48, 0x88, 0x88, 0x88, 0xA8, 0xAB, 0x8B, 0x88, 0x8F, 0x96, 0xA0, 0xD8, 0xFF },
    { 0xFF, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x0D, 0x0D, 0x01, 0xFF, 0xDA, 0x04, 0x68, 0xF0, 0x0F, 0x18, 0x2B, 0x5B, 0x98, 0xC8, 0xC8, 0x88, 0x88, 0x98, 0x98, 0xCF, 0xD6, 0xA0, 0xDB, 0xFF },
    { 0xFF, 0x01, 0x0D, 0x0D, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0xFF, 0x02, 0x84, 0x68, 0xF0, 0x0F, 0x18, 0x28, 0x58, 0x98, 0xC8, 0xD8, 0x98, 0xCB, 0xDB, 0x98, 0xCF, 0xD6, 0xA1, 0xC0, 0xFF },
    { 0xFF, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x0D, 0x0D, 0x01, 0xFF, 0x02, 0x84, 0x08, 0xF0, 0x0F, 0x18, 0x2B, 0x5B, 0x98, 0x88, 0x88, 0xA8, 0xA8, 0x88, 0x88, 0xCF, 0xD0, 0xA1, 0xC0, 0xFF },
    { 0xFF, 0x01, 0x01, 0x01, 0x01, 0x61, 0x61, 0x01, 0x0D, 0x0D, 0x01, 0xFF, 0x1A, 0x04, 0x08, 0xF0, 0x0F, 0x18, 0x2B, 0x4B, 0x88, 0x88, 0x88, 0xA8, 0xA8, 0x88, 0x88, 0x8F, 0x90, 0xA0, 0xD8, 0xFF },
    { 0xFF, 0x01, 0x0D, 0x0D, 0x01, 0x61, 0x61, 0x01, 0x01, 0x01, 0x01, 0xFF, 0x1A, 0x34, 0x68, 0xF0, 0x0F, 0x18, 0x28, 0x48, 0x88, 0xC8, 0xC8, 0x88, 0x8B, 0x9B, 0x98, 0x8F, 0x96, 0xAC, 0xD8, 0xFF },
    { 0xFF, 0x01, 0x01, 0x01, 0x01, 0x61, 0x61, 0x01, 0x0D, 0x0D, 0x01, 0xFF, 0x1A, 0x84, 0x68, 0xF0, 0x0F, 0x18, 0x2B, 0x5B, 0xB8, 0xE8, 0xC8, 0x88, 0x88, 0x98, 0xB8, 0xEF, 0xD6, 0xA1, 0xD8, 0xFF },
    { 0xFF, 0x01, 0x0D, 0x0D, 0x01, 0x61, 0x61, 0x01, 0x01, 0x01, 0x01, 0xFF, 0x02, 0x84, 0x08, 0xF0, 0x0F, 0x18, 0x28, 0x58, 0x98, 0xC8, 0xC8, 0xA8, 0xAB, 0x9B, 0x98, 0xCF, 0xD0, 0xA1, 0xC0, 0xFF },
    { 0xFF, 0x01, 0x0D, 0x0D, 0x01, 0x01, 0x01, 0x01, 0x0D, 0x0D, 0x01, 0xFF, 0x1A, 0x84, 0x68, 0xF0, 0x0F, 0x18, 0x2B, 0x4B, 0x88, 0x88, 0x88, 0xA8, 0xAB, 0x8B, 0x88, 0x8F, 0x96, 0xA1, 0xD8, 0xFF },
    { 0xFF, 0x01, 0x0D, 0x0D, 0x01, 0x01, 0x01, 0x01, 0x0D, 0x0D, 0x01, 0xFF, 0x1A, 0x34, 0x68, 0xF0, 0x0F, 0x18, 0x2B, 0x5B, 0x98, 0xC8, 0xC8, 0xA8, 0xAB, 0x9B, 0x98, 0xCF, 0xD6, 0xAC, 0xD8, 0xFF },
    { 0xFF, 0x01, 0x0D, 0x0D, 0x01, 0x01, 0x01, 0x01, 0x0D, 0x0D, 0x01, 0xFF, 0x1A, 0x04, 0x08, 0xF0, 0x0F, 0x18, 0x2B, 0x5B, 0xB8, 0xE8, 0xC8, 0x88, 0x8B, 0x9B, 0xB8, 0xEF, 0xD0, 0xA0, 0xD8, 0xFF },
    { 0xFF, 0x01, 0x0D, 0x0D, 0x01, 0x01, 0x01, 0x01, 0x0D, 0x0D, 0x01, 0xFF, 0x02, 0x84, 0x08, 0xF0, 0x0F, 0x18, 0x2B, 0x4B, 0x88, 0xC8, 0xC8, 0x88, 0x8B, 0x9B, 0x98, 0x8F, 0x90, 0xA1, 0xC0, 0xFF },
    { 0xFF, 0x01, 0x0D, 0x0D, 0x01, 0x61, 0x61, 0x01, 0x0D, 0x0D, 0x01, 0xFF, 0x02, 0x84, 0x68, 0xF0, 0x0F, 0x18, 0x2B, 0x4B, 0x88, 0x88, 0x88, 0xA8, 0xAB, 0x8B, 0x88, 0x8F, 0x96, 0xA1, 0xC0, 0xFF },
    { 0xFF, 0x01, 0x0D, 0x0D, 0x01, 0x61, 0x61, 0x01, 0x0D, 0x0D, 0x01, 0xFF, 0xDA, 0x04, 0x68, 0xF0, 0x0F, 0x18, 0x2B, 0x5B, 0x98, 0x88, 0x88, 0xA8, 0xAB, 0x8B, 0x88, 0xCF, 0xD6, 0xA0, 0xDB, 0xFF },
    { 0xFF, 0x01, 0x0D, 0x0D, 0x01, 0x61, 0x61, 0x01, 0x0D, 0x0D, 0x01, 0xFF, 0x1A, 0x04, 0x68, 0xF0, 0x0F, 0x18, 0x2B, 0x5B, 0x98, 0xC8, 0xD8, 0x98, 0xCB, 0xDB, 0x98, 0xCF, 0xD6, 0xA0, 0xD8, 0xFF },
    { 0xFF, 0x01, 0x0D, 0x0D, 0x01, 0x61, 0x61, 0x01, 0x0D, 0x0D, 0x01, 0xFF, 0x02, 0x84, 0x08, 0xF0, 0x0F, 0x18, 0x2B, 0x5B, 0x98, 0xC8, 0xC8, 0x88, 0x8B, 0x9B, 0x98, 0xCF, 0xD0, 0xA1, 0xC0, 0xFF },
    { 0xFF, 0x01, 0x0D, 0x0D, 0x01, 0x0D, 0x0D, 0x01, 0x0D, 0x0D, 0x01, 0xFF, 0x1A, 0x04, 0x68, 0xF0, 0x0F, 0x18, 0x2B, 0x5B, 0x98, 0x8B, 0x8B, 0x88, 0x8B, 0x8B, 0x88, 0xCF, 0xD6, 0xA0, 0xD8, 0xFF },
    { 0xFF, 0x01, 0x6D, 0x6D, 0x01, 0x01, 0x01, 0x01, 0x6D, 0x6D, 0x01, 0xFF, 0x1A, 0x84, 0x68, 0xF0, 0x0F, 0x18, 0x2B, 0x5B, 0x98, 0xC8, 0xC8, 0x88, 0x8B, 0x9B, 0x98, 0xCF, 0xD6, 0xA1, 0xD8, 0xFF },
    { 0xFF, 0x01, 0x0D, 0x0D, 0x01, 0x0D, 0x0D, 0x01, 0x0D, 0x0D, 0x01, 0xFF, 0x1A, 0x84, 0x08, 0xF0, 0x0F, 0x18, 0x2B, 0x5B, 0x98, 0xCB, 0xCB, 0xA8, 0xAB, 0x9B, 0x98, 0xCF, 0xD0, 0xA1, 0xD8, 0xFF },
    { 0xFF, 0x01, 0x6D, 0x6D, 0x01, 0x01, 0x01, 0x01, 0x6D, 0x6D, 0x01, 0xFF, 0x02, 0x04, 0x68, 0xF0, 0x0F, 0x18, 0x2B, 0x4B, 0x88, 0xC8, 0xC8, 0xA8, 0xAB, 0x9B, 0x98, 0x8F, 0x96, 0xA0, 0xC0, 0xFF },
    { 0xFF, 0x55, 0xAB, 0x55, 0x0B, 0x65, 0x6B, 0x05, 0xAB, 0x55, 0xAB, 0xFF, 0xAA, 0x54, 0xA8, 0xF0, 0x0F, 0x1D, 0x2A, 0x5D, 0xAA, 0xDD, 0xAA, 0xDD, 0xAA, 0xDD, 0xAA, 0xDF, 0xBA, 0xF5, 0xEA, 0xFF },
    { 0xFF, 0x41, 0xAD, 0x4D, 0xA1, 0x55, 0xAB, 0x55, 0x2B, 0x55, 0x2B, 0xFF, 0xAA, 0x54, 0xA8, 0xF0, 0x0F, 0x1D, 0x2A, 0x5D, 0xAA, 0xDD, 0xAA, 0xD8, 0xAB, 0xDB, 0xA8, 0xDF, 0xBA, 0xF5, 0xEA, 0xFF },
    { 0xFF, 0x55, 0x2B, 0x55, 0x2B, 0x55, 0xAB, 0x41, 0xAD, 0x4D, 0xA1, 0xFF, 0xAA, 0x54, 0xA8, 0xF0, 0x0F, 0x18, 0x2B, 0x5B, 0xA8, 0xDD, 0xAA, 0xDD, 0xAA, 0xDD, 0xAA, 0xDF, 0xBA, 0xF5, 0xEA, 0xFF },
    { 0xFF, 0x55, 0x2B, 0x55, 0x0B, 0x65, 0x6B, 0x01, 0xAD, 0x4D, 0xA1, 0xFF, 0xAA, 0x54, 0xA8, 0xF0, 0x0F, 0x18, 0x2B, 0x5B, 0xA8, 0xDD, 0xAA, 0xDD, 0xAA, 0xDD, 0xAA, 0xDF, 0xBA, 0xF5, 0xEA, 0xFF },
    { 0xFF, 0x41, 0xAD, 0x4D, 0x01, 0x65, 0x6B, 0x05, 0x2B, 0x55, 0x2B, 0xFF, 0xAA, 0x54, 0xA8, 0xF0, 0x0F, 0x1D, 0x2A, 0x5D, 0xAA, 0xDD, 0xAA, 0xD8, 0xAB, 0xDB, 0xA8, 0xDF, 0xBA, 0xF5, 0xEA, 0xFF },
    { 0xFF, 0x41, 0x2D, 0x4D, 0x21, 0x55, 0xAB, 0x41, 0x2D, 0x4D, 0x21, 0xFF, 0xAA, 0x54, 0xA8, 0xF0, 0x0F, 0x18, 0x2B, 0x5B, 0xA8, 0xDD, 0xAA, 0xD8, 0xAB, 0xDB, 0xA8, 0xDF, 0xBA, 0xF5, 0xEA, 0xFF },
    { 0xFF, 0x41, 0x2D, 0x4D, 0x01, 0x65, 0x6B, 0x01, 0x2D, 0x4D, 0x21, 0xFF, 0xAA, 0x54, 0xA8, 0xF0, 0x0F, 0x18, 0x2B, 0x5B, 0xA8, 0xDD, 0xAA, 0xD8, 0xAB, 0xDB, 0xA8, 0xDF, 0xBA, 0xF5, 0xEA, 0xFF },
    { 0xFF, 0x41, 0x2D, 0x4D, 0x21, 0x4D, 0x2D, 0x41, 0x2D, 0x4D, 0x21, 0xFF, 0xAA, 0x54, 0xA8, 0xF0, 0x0F, 0x18, 0x2B, 0x5B, 0xA8, 0xDB, 0xAB, 0xD8, 0xAB, 0xDB, 0xA8, 0xDF, 0xBA, 0xF5, 0xEA, 0xFF },
    { 0xFF, 0x01, 0x6D, 0x6D, 0x01, 0x55, 0xAB, 0x01, 0x6D, 0x6D, 0x01, 0xFF, 0xAA, 0x54, 0xA8, 0xF0, 0x0F, 0x18, 0x2B, 0x5B, 0xA8, 0xDD, 0xAA, 0xD8, 0xAB, 0xDB, 0xA8, 0xDF, 0xBA, 0xF5, 0xEA, 0xFF },
    { 0xAA, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x04, 0x00, 0x50, 0x0A, 0x00, 0x20, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x55 },
    { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFC, 0xF8, 0xF0, 0x0F, 0x1F, 0x3F, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF },
};

PROGMEM static const uint8_t imgCursor[6][12] = { // 12x6 x6
    { 0x01, 0x03, 0x07, 0x0F, 0x1F, 0x3F, 0x3F, 0x1F, 0x0F, 0x07, 0x03, 0x01 },
    { 0x00, 0x01, 0x03, 0x0F, 0x1F, 0x3F, 0x3F, 0x1F, 0x0F, 0x03, 0x01, 0x00 },
    { 0x00, 0x00, 0x01, 0x07, 0x1F, 0x3F, 0x3F, 0x1F, 0x07, 0x01, 0x00, 0x00 },
    { 0x00, 0x00, 0x00, 0x03, 0x0F, 0x3F, 0x3F, 0x0F, 0x03, 0x00, 0x00, 0x00 },
    { 0x00, 0x00, 0x00, 0x00, 0x07, 0x3F, 0x3F, 0x07, 0x00, 0x00, 0x00, 0x00 },
    { 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00 },
};

PROGMEM static const uint8_t imgCursorMask[6][14] = { // 14x8 x6
    { 0x03, 0x07, 0x0F, 0x1F, 0x3F, 0x7F, 0xFF, 0xFF, 0x7F, 0x3F, 0x1F, 0x0F, 0x07, 0x03 },
    { 0x00, 0x03, 0x07, 0x1F, 0x3F, 0x7F, 0xFF, 0xFF, 0x7F, 0x3F, 0x1F, 0x07, 0x03, 0x00 },
    { 0x00, 0x00, 0x03, 0x0F, 0x3F, 0x7F, 0xFF, 0xFF, 0x7F, 0x3F, 0x0F, 0x03, 0x00, 0x00 },
    { 0x00, 0x00, 0x00, 0x07, 0x1F, 0x7F, 0xFF, 0xFF, 0x7F, 0x1F, 0x07, 0x00, 0x00, 0x00 },
    { 0x00, 0x00, 0x00, 0x00, 0x0F, 0x7F, 0xFF, 0xFF, 0x7F, 0x0F, 0x00, 0x00, 0x00, 0x00 },
    { 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00 },
};

PROGMEM static const uint8_t imgMiniDie[6][5] = {
    { 0x1F, 0x1F, 0x1B, 0x1F, 0x1F }, // 1
    { 0x1F, 0x1D, 0x1F, 0x17, 0x1F }, // 2
    { 0x1F, 0x17, 0x1B, 0x1D, 0x1F }, // 3
    { 0x1F, 0x15, 0x1F, 0x15, 0x1F }, // 4
    { 0x1F, 0x15, 0x1B, 0x15, 0x1F }, // 5
    { 0x1F, 0x11, 0x1F, 0x11, 0x1F }, // 6
};

/*---------------------------------------------------------------------------*/
/*                                Sound Data                                 */
/*---------------------------------------------------------------------------*/

PROGMEM static const byte soundStart[] = {
    0x90, 72, 0, 100, 0x90, 74, 0, 100, 0x90, 76, 0, 100,
    0x90, 77, 0, 100, 0x90, 79, 0, 200, 0x80, 0xF0
};

PROGMEM static const byte soundAppearDie[] = {
    0x90, 64, 0, 20, 0x90, 56, 0, 18, 0x90, 60, 0, 16,
    0x90, 52, 0, 14, 0x90, 56, 0, 12, 0x90, 48, 0, 10, 0x80, 0xF0
};

PROGMEM static const byte soundLevelUp[] = {
    0x90, 73, 0, 80, 0x90, 77, 0, 120, 0x80, 0, 80,
    0x90, 73, 0, 80, 0x90, 77, 0, 120, 0x80, 0, 80,
    0x90, 73, 0, 80, 0x90, 77, 0, 120, 0x80, 0, 80, 0x80, 0xF0
};

PROGMEM static const byte soundTimeToBlink[] = {
    0x90, 104, 0, 20, 0x80, 0, 20, 0x90, 104, 0, 20, 0x80, 0xF0
};

PROGMEM static const byte soundOver[] = {
    0x90, 55, 0, 120, 0x90, 54, 0, 140, 0x90, 53, 0, 160, 0x90, 52, 0, 180,
    0x90, 51, 0, 200, 0x90, 50, 0, 220, 0x90, 49, 0, 240, 0x90, 48, 0, 260, 0x80, 0xF0
};
PROGMEM static const byte soundClear[] = {
    0x90, 81, 0, 40, 0x80, 0, 40, 0x90, 86, 0, 40, 0x80, 0, 40,
    0x90, 90, 0, 40, 0x80, 0, 40, 0xE0
};

PROGMEM static const byte soundAgain[] = {
    0x90, 60, 0, 64, 0x80, 0, 64, 0xE0
};

PROGMEM static const byte soundVanishDieOne[] = {
    0x90, 84, 0, 30, 0x90, 85, 0, 30, 0x90, 86, 0, 30, 0x90, 87, 0, 30,
    0x90, 88, 0, 30, 0x90, 89, 0, 30, 0x90, 90, 0, 30, 0x90, 91, 0, 30, 0x80, 0xF0
};

PROGMEM static const byte soundVanishDieTwo[] = {
    0x90, 84, 0, 90, 0x90, 91, 0, 90, 0x80, 0xF0
};

PROGMEM static const byte soundVanishDieThree[] = {
    0x90, 93, 0, 75, 0x90, 84, 0, 75, 0x90, 89, 0, 75, 0x80, 0xF0
};

PROGMEM static const byte soundVanishDieFour[] = {
    0x90, 95, 0, 67, 0x90, 86, 0, 67, 0x90, 91, 0, 67, 0x90, 83, 0, 67, 0x80, 0xF0
};

PROGMEM static const byte soundVanishDieFive[] = {
    0x90, 88, 0, 63, 0x90, 91, 0, 63, 0x90, 100, 0, 63,
    0x90, 84, 0, 63, 0x90, 96, 0, 63, 0x80, 0xF0
};

PROGMEM static const byte soundVanishDieSix[] = {
    0x90, 84, 0, 60, 0x90, 93, 0, 60, 0x90, 96, 0, 60,
    0x90, 89, 0, 60, 0x90, 93, 0, 60, 0x90, 101, 0, 60, 0x80, 0xF0
};

PROGMEM static const byte * const soundVanishTable[] = {
    soundVanishDieOne,  soundVanishDieTwo,  soundVanishDieThree,
    soundVanishDieFour, soundVanishDieFive, soundVanishDieSix,
};

/*---------------------------------------------------------------------------*/
/*                                Puzzle Data                                */
/*---------------------------------------------------------------------------*/

#ifdef DEBUG
PROGMEM static const uint8_t puzzleData[BYTES_PER_ISSUE] = {
    0xDE, 0x7B, 0xEF, 0xBD, 0xF7, 0xFF, 0xFF, 0xFF, 0xBD, 0xFF, 0xE4, 0x93, 0xEF, 0xFD, 0xFF, 0xFF, 0x7F, 0xEF, 0xBD, 0xF7, 0xDE, 0x7B, 0x03,
};
#else
PROGMEM static const uint8_t puzzleData[BYTES_PER_ISSUE * COUNT_ISSUES] = {
    0xDE, 0x7B, 0xEF, 0xBD, 0xF7, 0xFF, 0xFF, 0xEF, 0xBD, 0xFF, 0x1F, 0x7C, 0xEF, 0xFD, 0x47, 0xE7, 0x7B, 0xEF, 0xFF, 0xFF, 0xDF, 0x7B, 0x02,
    0xDE, 0x7B, 0xEF, 0xBD, 0xF7, 0xFE, 0xFF, 0xEF, 0xBD, 0xF7, 0x9F, 0x20, 0xEF, 0xBD, 0xFF, 0xFF, 0x7B, 0xEF, 0xBD, 0xF7, 0xDE, 0x7B, 0x02,
    0xDE, 0x7B, 0xEF, 0xBD, 0xF7, 0xFF, 0xFF, 0xFF, 0xBD, 0xFF, 0xE4, 0x93, 0xEF, 0xFD, 0xFF, 0xFF, 0x7F, 0xEF, 0xBD, 0xF7, 0xDE, 0x7B, 0x03,
    0xDE, 0x7B, 0xEF, 0xBD, 0xF7, 0xFF, 0xFF, 0xEF, 0xBD, 0xFF, 0xE8, 0x2B, 0xEF, 0xFD, 0xA7, 0xFF, 0x7B, 0xEF, 0xFF, 0xFF, 0xDF, 0x7B, 0x04,
    0xDE, 0x7B, 0xEF, 0xBD, 0xF7, 0xFF, 0xFF, 0xEF, 0xBD, 0x9F, 0xFF, 0x13, 0xEF, 0xFD, 0xFF, 0xFF, 0x7B, 0xEF, 0xBD, 0xF7, 0xDE, 0x7B, 0x02,
    0xDE, 0x7B, 0xEF, 0xBD, 0xF7, 0xFE, 0xFF, 0xEF, 0xBD, 0xF7, 0xFF, 0x7F, 0xEF, 0x3D, 0x72, 0xFF, 0x7B, 0xEF, 0xFD, 0xF2, 0xDE, 0x7B, 0x06,
    0xDE, 0x7B, 0xEF, 0xBD, 0xF7, 0xFF, 0x7B, 0xF4, 0xBD, 0xFF, 0xFF, 0xFF, 0xEF, 0xFD, 0x3F, 0xFE, 0x7F, 0xEF, 0xBD, 0xF7, 0xDE, 0x7B, 0x05,
    0xFE, 0xFF, 0xFF, 0xBF, 0xF7, 0x5F, 0xFC, 0xFB, 0xBD, 0xFF, 0xFF, 0xFC, 0xEF, 0xFD, 0x67, 0x3F, 0x7D, 0xEF, 0xFF, 0xFF, 0xFF, 0x7B, 0x04,
    0xDE, 0x7B, 0xEF, 0xBD, 0xF7, 0xFE, 0xFF, 0xEB, 0xBD, 0xF7, 0xE7, 0x37, 0xEF, 0xBD, 0xFF, 0x5F, 0x78, 0xEF, 0xBD, 0xF7, 0xDE, 0x7B, 0x04,
    0xDE, 0x7B, 0xEF, 0xBD, 0xF7, 0xBF, 0xFE, 0xF3, 0xBD, 0xF7, 0xFF, 0xFE, 0xEF, 0xBD, 0xF7, 0xDE, 0x7B, 0xEF, 0xBD, 0xF7, 0xDE, 0x7B, 0x06,
    0xDE, 0x7B, 0xEF, 0xBD, 0xFF, 0xFF, 0xCB, 0xFF, 0xFD, 0xFF, 0x5F, 0x7F, 0xE5, 0xBD, 0xF7, 0xDE, 0x7B, 0xEF, 0xBD, 0xF7, 0xDE, 0x7B, 0x0A,
    0xDE, 0x7B, 0xEF, 0xBD, 0xF7, 0x1E, 0xFD, 0xFF, 0xBD, 0xF7, 0x3F, 0xFD, 0xEF, 0xBD, 0xFF, 0xFF, 0x7F, 0xEF, 0xBD, 0xFF, 0xE8, 0x7B, 0x06,
    0x3E, 0xFE, 0x7F, 0xBC, 0xF7, 0xFE, 0x7F, 0xEF, 0xBD, 0xF7, 0x3F, 0x78, 0xEF, 0xBD, 0xFD, 0x5F, 0x78, 0xEF, 0xBD, 0xF7, 0xDE, 0x7B, 0x08,
    0x3E, 0xFC, 0x2F, 0xBD, 0xF7, 0xFE, 0xFF, 0xFF, 0xBD, 0xF7, 0xED, 0xFF, 0xEF, 0xFD, 0xFF, 0x5F, 0x79, 0xEF, 0xBD, 0xF7, 0xDE, 0x7B, 0x06,
    0xBE, 0xFC, 0xFF, 0xBD, 0xF7, 0xDF, 0xFB, 0xEF, 0xBD, 0xFF, 0xFE, 0x7F, 0xEF, 0xFD, 0xFF, 0xDF, 0x78, 0xEF, 0xBD, 0xF7, 0xDE, 0x7B, 0x07,
    0xDE, 0x7F, 0xFF, 0xBD, 0xF7, 0xFF, 0xCF, 0xFF, 0xBD, 0xF7, 0xD2, 0x4B, 0xEF, 0xFD, 0xFF, 0xF2, 0x7F, 0xEF, 0xFD, 0xF7, 0xDF, 0x7B, 0x07,
    0xDE, 0x7B, 0xEF, 0xBD, 0xF7, 0xCC, 0xFB, 0xEF, 0xBD, 0xFF, 0x9F, 0x4A, 0xEF, 0xFD, 0xFB, 0xFE, 0x7B, 0x6F, 0xBE, 0xFF, 0xE1, 0x7B, 0x08,
    0xDE, 0x7B, 0xEF, 0xBD, 0xF7, 0xFE, 0x7F, 0xEF, 0xBD, 0x87, 0xFF, 0xFF, 0xE2, 0xBD, 0xFF, 0xDF, 0x7B, 0xEF, 0xBD, 0xF7, 0xDE, 0x7B, 0x09,
    0xDE, 0x7B, 0xEF, 0xBD, 0xF7, 0x7E, 0x06, 0xEF, 0xBD, 0x77, 0xFF, 0x7F, 0xEF, 0xBD, 0x9F, 0xDF, 0x7B, 0xEF, 0xBD, 0xF7, 0xDE, 0x7B, 0x05,
    0xDE, 0x7B, 0xEF, 0xBD, 0xF7, 0xFE, 0xD2, 0xEA, 0xBD, 0xF7, 0xFF, 0x7F, 0xEF, 0xBD, 0xBF, 0xB6, 0x7A, 0xEF, 0xBD, 0xF7, 0xDE, 0x7B, 0x0A,
    0xDE, 0xFB, 0xEF, 0xBD, 0xF7, 0xFE, 0xA7, 0xEF, 0xBD, 0xFF, 0x68, 0xAA, 0xEF, 0xBD, 0xFF, 0xEB, 0x7B, 0xEF, 0xBD, 0xFF, 0xDE, 0x7B, 0x08,
    0xE0, 0x7F, 0xFF, 0xBF, 0xF9, 0xFF, 0xFF, 0xFF, 0xBF, 0xF7, 0xFF, 0x7F, 0xEF, 0xFF, 0xFF, 0xFF, 0xFF, 0x8F, 0xFE, 0xF7, 0xFF, 0x37, 0x0E,
    0xDE, 0x7B, 0xEF, 0xBD, 0xF7, 0xFF, 0xFF, 0xFF, 0xBF, 0x17, 0x06, 0xBD, 0x48, 0xFD, 0xFF, 0xFF, 0xFF, 0xEF, 0xBD, 0xF7, 0xDE, 0x7B, 0x08,
    0xDE, 0x7B, 0xEF, 0xBD, 0xF7, 0xDE, 0x7B, 0xEF, 0x3D, 0xFB, 0xEC, 0xB3, 0xCF, 0xFE, 0xFF, 0xFF, 0xFF, 0xEF, 0xBD, 0xF7, 0xDE, 0x7B, 0x08,
    0xDE, 0x7B, 0xEF, 0xBD, 0xF7, 0xDE, 0x7B, 0xEF, 0x3D, 0xFB, 0xEC, 0xB3, 0xBF, 0xFD, 0xFF, 0xDF, 0xFF, 0xEF, 0xBD, 0xF7, 0xDE, 0x7B, 0x12,
    0xDE, 0x7B, 0xFF, 0x83, 0xF7, 0xFE, 0x7F, 0xF2, 0xBD, 0xF7, 0x7F, 0x7D, 0xEF, 0xBD, 0xFF, 0xDF, 0x79, 0xEF, 0xBD, 0xF7, 0xDE, 0x7B, 0x09,
    0xFF, 0xFF, 0xFF, 0xBF, 0xFF, 0x9F, 0xFE, 0xFF, 0xBD, 0xF9, 0xE4, 0xFF, 0xE9, 0xFF, 0xB7, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0x7B, 0x08,
    0xFE, 0xFF, 0xFF, 0x3F, 0xF1, 0xE1, 0xFF, 0x9F, 0xBC, 0xFF, 0xFF, 0x5B, 0xEF, 0xFD, 0xFF, 0xD2, 0x7B, 0xEF, 0xFF, 0xF2, 0xDE, 0x7B, 0x08,
    0x1E, 0xFE, 0xFF, 0xA1, 0xF7, 0xFF, 0xFF, 0xFF, 0xBD, 0xE7, 0xFF, 0xFF, 0xE8, 0xFD, 0xFF, 0xFF, 0x7F, 0xEF, 0xE5, 0xFF, 0x5F, 0x7A, 0x11,
    0xFE, 0x7F, 0xEF, 0xBD, 0xF7, 0xFF, 0x7F, 0xEF, 0xBD, 0x07, 0xFE, 0x7F, 0xEF, 0x7D, 0xF0, 0xFE, 0x7F, 0xEF, 0x81, 0xF7, 0xFE, 0x6F, 0x1C,
    0xDE, 0x7B, 0xEF, 0xBD, 0xF7, 0xFF, 0x07, 0xE2, 0xBD, 0xFF, 0xBF, 0xA9, 0xEF, 0xFD, 0xFF, 0xFF, 0x7F, 0xEF, 0xBD, 0xF7, 0xDE, 0x7B, 0x08,
    0xDE, 0xFF, 0xFF, 0xBD, 0xF7, 0xFE, 0xEF, 0xEF, 0xBD, 0xF7, 0xF0, 0x2F, 0xEF, 0xBD, 0x6F, 0xFF, 0x7B, 0xEF, 0xBD, 0xF7, 0xDE, 0x7B, 0x07,
    0xDE, 0xFB, 0xFF, 0xBD, 0xF7, 0xFE, 0x23, 0xF3, 0xBD, 0xFF, 0x88, 0xA8, 0xEF, 0xFD, 0x37, 0xEA, 0x7B, 0xEF, 0xFD, 0xFF, 0xDE, 0x7B, 0x0A,
    0xDE, 0x7B, 0xE1, 0xBD, 0xF7, 0x3E, 0xFC, 0xFF, 0xFF, 0xF0, 0xFE, 0x78, 0xFF, 0xBD, 0x0F, 0xFF, 0xFF, 0xEF, 0xBD, 0x07, 0xDE, 0x7B, 0x0A,
    0xDE, 0x7B, 0xEF, 0xBD, 0xF7, 0xFE, 0xFF, 0xEA, 0xBD, 0xF7, 0x9F, 0x7E, 0xEF, 0xBD, 0x1F, 0xE2, 0x7B, 0xEF, 0xFD, 0xFF, 0xDF, 0x7B, 0x09,
    0xDE, 0x7B, 0xEF, 0xBD, 0xF7, 0x1E, 0xF6, 0xE8, 0xBD, 0xF7, 0x1F, 0x7E, 0xEF, 0xBD, 0x9F, 0x5F, 0x7A, 0xEF, 0xFD, 0xFF, 0xDF, 0x7B, 0x07,
    0xDE, 0x7B, 0xEF, 0xBD, 0xF7, 0xDF, 0xFD, 0xF4, 0xBD, 0xFF, 0xEB, 0xB7, 0xEF, 0xBD, 0xF7, 0xDE, 0x7B, 0xEF, 0xBD, 0xF7, 0xDE, 0x7B, 0x08,
    0xDE, 0x7B, 0xEF, 0xBD, 0xF7, 0x9E, 0x76, 0xEA, 0xBD, 0xF7, 0x00, 0x00, 0xEF, 0xBD, 0xFF, 0xFF, 0x7B, 0xEF, 0xFD, 0xFF, 0xDF, 0x7B, 0x0A,
    0xDE, 0x7B, 0xEF, 0xBD, 0xF7, 0xFF, 0xFF, 0xFF, 0xBD, 0x1F, 0x83, 0x03, 0xE0, 0xFD, 0xFF, 0xFF, 0x7F, 0xEF, 0xBD, 0xF7, 0xDE, 0x7B, 0x07,
    0xDE, 0x7B, 0xEF, 0xBD, 0xF7, 0x9E, 0x1B, 0xEE, 0xBD, 0xF7, 0xFF, 0x03, 0xEF, 0xBD, 0xFF, 0xDF, 0x78, 0xEF, 0xBD, 0xF7, 0xDE, 0x7B, 0x0A,
};
#endif

/*---------------------------------------------------------------------------*/
/*                                  Others                                   */
/*---------------------------------------------------------------------------*/

PROGMEM static const uint8_t mapDieRotate[6 * 4 * 4] = {
    IMG_OBJ_DIE_2C, IMG_OBJ_DIE_3B, IMG_OBJ_DIE_4D, IMG_OBJ_DIE_5A, // 1A
    IMG_OBJ_DIE_3C, IMG_OBJ_DIE_5B, IMG_OBJ_DIE_2D, IMG_OBJ_DIE_4A, // 1B
    IMG_OBJ_DIE_5C, IMG_OBJ_DIE_4B, IMG_OBJ_DIE_3D, IMG_OBJ_DIE_2A, // 1C
    IMG_OBJ_DIE_4C, IMG_OBJ_DIE_2B, IMG_OBJ_DIE_5D, IMG_OBJ_DIE_3A, // 1D
    IMG_OBJ_DIE_1C, IMG_OBJ_DIE_4A, IMG_OBJ_DIE_3A, IMG_OBJ_DIE_6A, // 2A
    IMG_OBJ_DIE_4B, IMG_OBJ_DIE_6B, IMG_OBJ_DIE_1D, IMG_OBJ_DIE_3B, // 2B
    IMG_OBJ_DIE_6C, IMG_OBJ_DIE_3C, IMG_OBJ_DIE_4C, IMG_OBJ_DIE_1A, // 2C
    IMG_OBJ_DIE_3D, IMG_OBJ_DIE_1B, IMG_OBJ_DIE_6D, IMG_OBJ_DIE_4D, // 2D
    IMG_OBJ_DIE_1D, IMG_OBJ_DIE_2A, IMG_OBJ_DIE_5A, IMG_OBJ_DIE_6D, // 3A
    IMG_OBJ_DIE_2B, IMG_OBJ_DIE_6A, IMG_OBJ_DIE_1A, IMG_OBJ_DIE_5B, // 3B
    IMG_OBJ_DIE_6B, IMG_OBJ_DIE_5C, IMG_OBJ_DIE_2C, IMG_OBJ_DIE_1B, // 3C
    IMG_OBJ_DIE_5D, IMG_OBJ_DIE_1C, IMG_OBJ_DIE_6C, IMG_OBJ_DIE_2D, // 3D
    IMG_OBJ_DIE_1B, IMG_OBJ_DIE_5A, IMG_OBJ_DIE_2A, IMG_OBJ_DIE_6B, // 4A
    IMG_OBJ_DIE_5B, IMG_OBJ_DIE_6C, IMG_OBJ_DIE_1C, IMG_OBJ_DIE_2B, // 4B
    IMG_OBJ_DIE_6D, IMG_OBJ_DIE_2C, IMG_OBJ_DIE_5C, IMG_OBJ_DIE_1D, // 4C
    IMG_OBJ_DIE_2D, IMG_OBJ_DIE_1A, IMG_OBJ_DIE_6A, IMG_OBJ_DIE_5D, // 4D
    IMG_OBJ_DIE_1A, IMG_OBJ_DIE_3A, IMG_OBJ_DIE_4A, IMG_OBJ_DIE_6C, // 5A
    IMG_OBJ_DIE_3B, IMG_OBJ_DIE_6D, IMG_OBJ_DIE_1B, IMG_OBJ_DIE_4B, // 5B
    IMG_OBJ_DIE_6A, IMG_OBJ_DIE_4C, IMG_OBJ_DIE_3C, IMG_OBJ_DIE_1C, // 5C
    IMG_OBJ_DIE_4D, IMG_OBJ_DIE_1D, IMG_OBJ_DIE_6B, IMG_OBJ_DIE_3D, // 5D
    IMG_OBJ_DIE_2A, IMG_OBJ_DIE_4D, IMG_OBJ_DIE_3B, IMG_OBJ_DIE_5C, // 6A
    IMG_OBJ_DIE_4A, IMG_OBJ_DIE_5D, IMG_OBJ_DIE_2B, IMG_OBJ_DIE_3C, // 6B
    IMG_OBJ_DIE_5A, IMG_OBJ_DIE_3D, IMG_OBJ_DIE_4B, IMG_OBJ_DIE_2C, // 6C
    IMG_OBJ_DIE_3A, IMG_OBJ_DIE_2D, IMG_OBJ_DIE_5B, IMG_OBJ_DIE_4C, // 6D
};

PROGMEM static const uint8_t mapWhiteDieImgId[6 * 2] = {
    IMG_OBJ_DIE_W_1,  IMG_OBJ_DIE_W_1,  // 1
    IMG_OBJ_DIE_W_2A, IMG_OBJ_DIE_W_2B, // 2
    IMG_OBJ_DIE_W_3A, IMG_OBJ_DIE_W_3B, // 3
    IMG_OBJ_DIE_W_4,  IMG_OBJ_DIE_W_4,  // 4
    IMG_OBJ_DIE_W_5,  IMG_OBJ_DIE_W_5,  // 5
    IMG_OBJ_DIE_W_6A, IMG_OBJ_DIE_W_6B, // 6
};

PROGMEM static const uint8_t tableLedRGB[6 * 3] = {
    0x14, 0x14, 0x14, // 1 White
    0x18, 0x18, 0x00, // 2 Yellow
    0x04, 0x04, 0x1F, // 3 Blue
    0x00, 0x1C, 0x1C, // 4 Cyan
    0x00, 0x1F, 0x00, // 5 Green
    0x1F, 0x04, 0x04, // 6 Pink
};

